package com.springapp.dao.dao.impl;

import com.springapp.dao.dao.IPaletteDAO;
import com.springapp.model.StrDetailsPalette;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Repository;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Hashtable;

/**
 * Created by Thomas on 02/09/14.
 */
@Repository
public class PaletteDAO implements IPaletteDAO{
    @Qualifier("dataSource") //Fait référence au datasource dans le mvc-dispatcher.xml
    @Autowired
    private DataSource dataSource;




    public Hashtable<Integer,ArrayList<StrDetailsPalette>> htPalArtByCmd(String sRefCmd){

        Hashtable<Integer, ArrayList<StrDetailsPalette>> hPalArtByCmd = new Hashtable<Integer, ArrayList<StrDetailsPalette>>();

        int eIDArticle=0;
        int eIDArticleTemp=0;

        String sql="SELECT art.IDArticle\n" +
                ",art.libelle as 'Nom Article'\n" +
                ",fou.NomFournisseur\n" +
                ",emp.IDEmplacement\n" +
                ",artFou.IDArtFournisseur\n" +
                ",  'Allee:'+cast(emp.allee as varchar(max)) + ' - ' + 'Rang:'+cast(emp.rang as varchar(max)) as 'EmplacementProduit'\n" +
                ",  emp.qteActuelleZoneStock as 'NbDePalette'\n" +
                ", p_ArtF.QteArticle AS 'QteArticleParPalette'\n" +
                ", p_ArtF.QteCarton AS 'QteCartonParPalette'\n" +
                ", (p_ArtF.QteArticle /p_ArtF.QteCarton) AS 'QteArticleParCarton'\n" +
                ", ( emp.qteActuelleZoneStock * p_ArtF.QteArticle) AS 'QteTotaleArticles'\n" +
                "\n" +
                "FROM Palette p\n" +
                "INNER JOIN Pal_ArtFou p_ArtF ON p_ArtF.IDPalette = p.IDPalette\n" +
                "INNER JOIN Emplacement emp ON emp.IDEmplacement = p.IDEmplacement\n" +
                "INNER JOIN Art_Fournisseur artFou ON artFou.IDArtFournisseur = p_ArtF.IDArtFou\n" +
                "INNER JOIN Fournisseur fou ON fou.IDFournisseur = artFou.IDFournisseur\n" +
                "INNER JOIN Article art ON art.IDArticle = artFou.IDArticle\n" +
                "INNER JOIN LigneCommande lig ON lig.IDArticle= art.IDArticle\n" +
                "INNER JOIN Commande cmd ON cmd.IDCommande=lig.IDCommande\n" +
                "INNER JOIN Art_SousCategorie artSS ON artSS.IDSousCat = art.IDArt_SousCategorie\n" +
                "WHERE\temp.EstPicking = 0\n" +
                "AND p.EstHeterogene = 0\n" +
                "AND p.IDEtatOperation <> 5\n" +
                "AND emp.IDEmplacement <> 999999\n" +
                "AND cmd.RefCommande='"+sRefCmd+"'\n" +
                "GROUP BY art.IDArticle,art.libelle,emp.IDEmplacement, artFou.IDArtFournisseur, emp.rang, emp.allee, emp.EstPicking,p.EstHeterogene, emp.qteActuelleZoneStock, fou.NomFournisseur, p_ArtF.QteArticle,p_ArtF.QteCarton\n" +
                "ORDER BY art.IDArticle, p_ArtF.QteArticle DESC";
        Connection conn=null;

        try {
            conn=dataSource.getConnection();
            PreparedStatement ps = conn.prepareStatement(sql);
            ResultSet result=ps.executeQuery();


            ArrayList<StrDetailsPalette> arDetailPalette= new ArrayList<StrDetailsPalette>();

            while(result.next()){
                eIDArticle=result.getInt("IDarticle");
                //La structure est toujours remplie
                StrDetailsPalette strencours = new StrDetailsPalette(
                        result.getString("NomFournisseur"),
                        result.getInt("IDEmplacement"),
                        result.getInt("IDArtFournisseur"),
                        result.getString("Nom Article"),
                        result.getString("EmplacementProduit"),
                        result.getInt("NbDePalette"),
                        result.getInt("QteArticleParPalette"),
                        result.getInt("QteCartonParPalette"),
                        result.getInt("QteArticleParCarton"),
                        result.getInt("NbDePalette") * result.getInt("QteArticleParPalette")

                                );



                if (eIDArticleTemp==0)
                {
                    //J'initialise le 1er ID article
                    eIDArticleTemp=result.getInt("IDarticle");

                    //Je rajoute ma structure dans mon tableau puis je rajoute le tableau de structure dans la hashtable
                    arDetailPalette.add(strencours);
                    //hPalArtByCmd.put(eIDArticle,arDetailPalette);

                }else if(eIDArticle!=eIDArticleTemp){
                        //J'ai 1 nouveau ID et je reinitialise le tableau de la structure dans la hashmap*
                        hPalArtByCmd.put(eIDArticleTemp,arDetailPalette);
                        arDetailPalette= new ArrayList<StrDetailsPalette>();
                        arDetailPalette.add(strencours);

                        eIDArticleTemp=eIDArticle;

                } else
                    {
                        //Je suis sur le même ID article et je rajoute la structure dans la hashtable
                        arDetailPalette.add(strencours);

                        //hPalArtByCmd.put(eIDArticle,arDetailPalette);
                    }

            }
            hPalArtByCmd.put(eIDArticleTemp,arDetailPalette);


        } catch (SQLException e) {
            e.printStackTrace();
        }
            return hPalArtByCmd;
    }
}